package com.nowcoder.community.d_controller;


import com.nowcoder.community.a_entity.Event;
import com.nowcoder.community.a_entity.User;
import com.nowcoder.community.c1_kafka.EventProducer;
import com.nowcoder.community.c_service.LikeService;
import com.nowcoder.community.z_util.CommunityUtil;
import com.nowcoder.community.z_util.HostHolder;
import com.nowcoder.community.z_util.RedisKeyUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.Map;
import com.nowcoder.community.z_util.CommunityConstant;

@Controller
public class LikeController implements CommunityConstant {

    @Autowired
    private LikeService likeService;
    @Autowired
    private HostHolder hostHolder;
    @Autowired
    private EventProducer eventProducer;
    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * <p>——————————————————————————————————————————————-————
     * <p> 异步ajax(post)+redis点赞
     * <p>——————————————————————————————————————————————-————
     */
    @RequestMapping(path = "/like", method = RequestMethod.POST)
    @ResponseBody
    public String dianzan(int entityType, int entityId, int entityUserId,String postId){
        User user = hostHolder.getUser();

        //点赞
        likeService.addLike(user.getId(), entityType, entityId, entityUserId);
        //点击按钮后的刷新（还有discusspostCon的显示刷新）
        // 数量
        long likeCount = likeService.findEntityLikeCount(entityType, entityId);
        // 状态
        int likeStatus = likeService.findEntityLikeStatus(user.getId(), entityType, entityId);
        Map<String, Object> map = new HashMap<>();
        map.put("likeCount", likeCount);
        map.put("likeStatus", likeStatus);


        //kafka系统通知
        if(likeStatus==1){
            //点赞才通知，取消点赞不通知(点赞不用查POJO，因为就是个fromid-toid：01状态，无内容)
            Event event = new Event()
                    .setTopic(TOPIC_LIKE)
                    .setUserId(hostHolder.getUser().getId())
                    .setEntityType(entityType)
                    .setEntityId(entityId)
                    .setEntityUserId(entityUserId)
                    .setData("postId", postId);
            eventProducer.fireEvent(event);

            /**
             * <p>————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
             * <p>      $这个不写listener里，因为listen里面3个topic太乱了，我api不知道咋取topic
             *          【能简单写就简单写！】
             * <p>————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
             */
            String redisKey = RedisKeyUtil.getPostScoreKey();
            redisTemplate.opsForSet().add(redisKey, postId);

        }


        return CommunityUtil.javaToJsonString(0, null, map);
    }
}
